package example;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2022-10-16
 * Time: 16:27
 */


//单例模式-懒汉模式
public class Singleton1 {

    //防止new对象的时候 指令重排序
    private static volatile Singleton1 instance = null;
    private Singleton1(){}
    //涉及到线程安全问题
    //1.当多个先同时来读instance时 都是null  那么多个线程对instance的修改的不确定性 倒是线程安全问题
    //同时new 出了多个实例 那么处理方式就是加锁
    public Singleton1 getInstance(){
        //3.当new对象的时候 防止指令重排序
        //new对象分三部分 创建内存 对内存初始化 把内存的地址赋值给引用
        if (instance == null){
            //2.那么加锁之后 假设有很多线程来调用getInstance 存在大量的锁竞争
            //那么在 在锁外面加上一层if判断
            synchronized (this){
                if (instance == null){
                    return new Singleton1();
                }
            }
        }
        return instance;
    }
}
